package com.kgc.sbt.schedule;

import com.kgc.sbt.mapper.VipMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Auther: Administrator
 * @Date: 2021年 06月24日 10:22
 * @Description: 检查会员是否到期业务实现类
 */
@Slf4j
@Component
public class CheckVipSchedule {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Autowired(required = false)
    private VipMapper vipMapper;

    // 静态注入redis
    private static Jedis jedis = new Jedis("127.0.0.1", 6379);

    static {
        // 用0库进行测试
        jedis.select(0);
        // 初始化一个的vipToken
        jedis.set("vipToken","null");
    }

    @Scheduled(fixedDelay = 10000)
    public void executeAsyncCheckVip() throws ParseException {
        String userPhoneNo = jedis.get("vipToken");
        log.info("******************开始异步检查会员是否过期 begin*************************");
        // 如果没有用户登录，则不检查会员是否过期
        if ("null".equals(userPhoneNo)){
            log.info("******************开始异步检查会员是否过期  end*************************");
            return;
        }
        String sql = "select id from user where phone = " + userPhoneNo;
        int userId = jdbcTemplate.queryForObject(sql, Integer.TYPE);
        // 判断该用户是否为会员
        if (1 == vipMapper.selectByUserId(userId).getType()){
            sql = "select vip_overtime from vip where user_id =" + userId;
            // 获取该用户的vip过期时间
            String vipOverTime = jdbcTemplate.queryForObject(sql, String.class);
            Date overTime= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(vipOverTime);
            long timeStamp= overTime.getTime();
            // 判断是否已经超过vip时间
            if (timeStamp < System.currentTimeMillis()){
                log.info("******************用户：{}会员过期，变更会员信息为普通会员****************", userPhoneNo);
                // 如果过期，则清空vip到期时间，并更新为普通会员
                vipMapper.updateVipToCommonByUserId(userId);
            } else {
                log.info("=============== 用户：{}，会员没有过期 ===============", userPhoneNo);
            }
        } else {
            log.info("++++++++++++ 用户：{}，会员已经过期 ++++++++++++++", userPhoneNo);
        }
        log.info("******************开始异步检查会员是否过期  end*************************");
    }
}
